// https://leetcode.cn/problems/sum-of-two-integers/

// 题干：给你两个整数 a 和 b ，不使用 运算符 + 和 - 计算并返回两整数之和。

// 示例：输入：a = 1, b = 2
//       输出：3

// 碎语：不适用加减符号，联想到异或无进位相加，可进位的数字如何表示？
//       联想到进位不过就是两个都是1则变为0，其余为0，其实就是与运算
//       将进位数往前移动一位，再次进行异或相加，直到进位数为0

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    int getSum(int a, int b)
    {
        while (b){
            int tmp = a ^ b; // tmp保存无进位相加的结果
            int carry = (a & b) << 1; // carry保存进位数

            b = carry;
            a = tmp;
        }

        return a;
    }
};

int main()
{
    Solution sol;

    cout << sol.getSum(1, 2) << endl;

    return 0;
}